package com.example.lte.api;

import cn.dev33.satoken.stp.StpUtil;
import com.example.lte.config.BusinessLogic;
import com.example.lte.config.SysBusinessUnitEnum;
import com.example.lte.entity.RoleEntity;
import com.example.lte.po.RolePO;
import com.example.lte.po.RoleReq;
import com.example.lte.po.UpdateOneRole;
import com.example.lte.service.IRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RestController
@RequestMapping("/role")
@Api(tags = "角色模块")
public class RoleController {

    @Autowired
    private IRoleService iRoleService;

    //{
    //    "code": 0,
    //    "msg": "操作成功",
    //    "data": {
    //        "content": [
    //            {
    //                "id": 1,
    //                "name": "dev",
    //                "note": "开发"
    //            },
    //            {
    //                "id": 2,
    //                "name": "test",
    //                "note": "测试"
    //            },
    //            {
    //                "id": 3,
    //                "name": "admin",
    //                "note": "管理员"
    //            },
    //            {
    //                "id": 4,
    //                "name": "u1",
    //                "note": "普通用户1"
    //            }
    //        ],
    //        "pageable": {
    //            "sort": {
    //                "sorted": true,
    //                "unsorted": false,
    //                "empty": false
    //            },
    //            "offset": 0,
    //            "pageSize": 10,
    //            "pageNumber": 0,
    //            "paged": true,
    //            "unpaged": false
    //        },
    //        "totalElements": 4,
    //        "totalPages": 1,
    //        "last": true,
    //        "number": 0,
    //        "size": 10,
    //        "sort": {
    //            "sorted": true,
    //            "unsorted": false,
    //            "empty": false
    //        },
    //        "numberOfElements": 4,
    //        "first": true,
    //        "empty": false
    //    },
    //    "timestamp": 1604024499449
    //}
    //
    @GetMapping("/page")
    @ApiOperation(value = "分页查询角色",notes = "详细描述-分页查询角色")
    @BusinessLogic(value = "分页查询角色",businessUnit = SysBusinessUnitEnum.ROLE_UNIT)
    public Page<RoleEntity> findRolePage(RoleReq roleReq) {
        StpUtil.checkLogin();
        RoleEntity role = RoleEntity.builder()
                .note(roleReq.getRoleName())
                .name(roleReq.getRoleCode())
                .id(roleReq.getRoleId())
                .build();
        Sort sort = Sort.by(Sort.Direction.ASC, "id");
        Pageable pageable = PageRequest.of(roleReq.getPageNo(), roleReq.getPageSize(), sort);

        return iRoleService.findByCondition(role, pageable);
    }

//{
//  "code": 0,
//  "msg": "操作成功",
//  "data": [
//    {
//      "id": 1,
//      "name": "dev",
//      "note": "开发",
//      "addTime": "2020-11-01 14:28:04",
//      "updateTime": "2020-11-01 14:28:04",
//      "version": 0
//    },
//    {
//      "id": 2,
//      "name": "test",
//      "note": "测试",
//      "addTime": "2020-11-01 14:28:04",
//      "updateTime": "2020-11-01 14:28:04",
//      "version": 0
//    },
//    {
//      "id": 3,
//      "name": "admin",
//      "note": "管理员",
//      "addTime": "2020-11-01 14:28:04",
//      "updateTime": "2020-11-01 14:28:04",
//      "version": 0
//    },
//    {
//      "id": 4,
//      "name": "u1",
//      "note": "普通用户1",
//      "addTime": "2020-11-01 14:28:04",
//      "updateTime": "2020-11-01 14:28:04",
//      "version": 0
//    }
//  ],
//  "timestamp": 1604212114410
//}
    @GetMapping("/enum")
    @ApiOperation(value = "查询角色枚举",notes = "详细描述-查询角色枚举")
    @BusinessLogic(value = "查询角色枚举",businessUnit = SysBusinessUnitEnum.ROLE_UNIT)
    public List<RoleEntity> getRoleEnum(){
        StpUtil.checkLogin();
        return iRoleService.getRoleEnum();
    }


    @GetMapping("/relRoleList")
    @ApiOperation(value = "查询用户的角色",notes = "详细描述-查询用户的角色")
    @BusinessLogic(value = "查询用户的角色",businessUnit = SysBusinessUnitEnum.ROLE_UNIT)
    public List<RoleEntity> getRelRoleByUserId(Long userId){
        StpUtil.checkLogin();
        return iRoleService.getRelRoleByUserId(userId);
    }

    @PostMapping("/save")
    @ApiOperation(value = "新增角色",notes = "详细描述-新增角色")
    @BusinessLogic(value = "新增角色",businessUnit = SysBusinessUnitEnum.ROLE_UNIT)
    public String addRole(@RequestBody @Valid  RolePO rolePO){
        StpUtil.checkLogin();
        RoleEntity roleEntity= RoleEntity.builder()
                .note(rolePO.getNote())
                .name(rolePO.getName())
                .build();
        iRoleService.saveOneRole(roleEntity);
        return "新增角色成功!";
    }

    @PutMapping("/update")
    @ApiOperation(value = "修改角色",notes = "详细描述-修改角色")
    @BusinessLogic(value = "修改角色",businessUnit = SysBusinessUnitEnum.ROLE_UNIT)
    public String updateRole(@RequestBody @Valid UpdateOneRole updateOneRole){
        StpUtil.checkLogin();
        RoleEntity rdb= iRoleService.findById(updateOneRole.getId());
        BeanUtils.copyProperties(updateOneRole,rdb);
        iRoleService.updateOneRole(rdb);
        return "编辑角色成功!";
    }


//    @DeleteMapping("/delByIds")
//    public String delByIds(@RequestParam Long ids){
//
//    }







}
